package com.gitee.kamismile.akka.core;

//import com.sun.xml.internal.bind.v2.runtime.output.SAXOutput;


//@Configuration
@Deprecated
public class AkkaConfig {

//    @Autowired
//    private ApplicationContext applicationContext;
//
//    @Autowired
//    private SpringExtension springExtension;
//
//    @Autowired
//    AkkaConstantProperties akkaConstantProperties;
//
//    @Autowired
//    ActorSystem actorSystem;
//
//
//    @EventListener
//    void deployBaseActor(ApplicationReadyEvent event) {
//        if (!(event.getSource() instanceof SpringApplication)) {
//            return;
//        }
////            Set<Object> sources = ((SpringApplication) event.getSource()).getSources();
//        Set<Object> sources = ((SpringApplication) event.getSource()).getAllSources();
//        sources.forEach(
//                s ->
//                {
//                    ComponentScan cs = AnnotationUtils.findAnnotation((Class<?>) s, ComponentScan.class);
//                    Optional.ofNullable(cs.basePackages())
//                            .ifPresent(
//                                    p ->
//                                    {
//                                        Arrays.stream(cs.basePackages()).forEach(
//                                                b ->
//                                                {
//                                                    Set<BeanDefinition> scan =
//                                                            new ClassPathScanningCandidateComponentProvider(true)
//                                                                    .findCandidateComponents(b);
//
//                                                    scan.forEach(u ->
//                                                            {
//                                                                Class<?> uClass = null;
//                                                                try {
//                                                                    uClass = Class.forName(u.getBeanClassName());
//                                                                } catch (ClassNotFoundException e) {
//                                                                    e.printStackTrace();
//                                                                }
//                                                                if (!BaseActor.class.isAssignableFrom(uClass)) {
//                                                                    return;
//                                                                }
//                                                                ConfigurableListableBeanFactory beanFactory = ((ConfigurableApplicationContext) applicationContext).getBeanFactory();
//
//                                                                Component beanNameComp = AnnotationUtils.findAnnotation(uClass, Component.class);
//                                                                String shortClassName = beanNameComp.value();
//                                                                 if(!StringUtil.isNotEmpty(shortClassName)){
//                                                                    shortClassName = ClassUtils.getShortNameAsProperty(uClass);
//                                                                 }
//                                                                ActorRef actorRef = actorSystem.actorOf(
//                                                                        springExtension.props(shortClassName, akkaConstantProperties.getConfig()),
//                                                                        shortClassName+"RealAkka");
//                                                                beanFactory.registerSingleton(shortClassName+ "AkkaRef", actorRef);
//
//                                                            }
//                                                    );
//
//                                                }
//                                        );
//                                    }
//                            );
//
//                }
//        );
//
//    }

}
